[t:/]$ 지식_

플래시 메모리 이모저모

2007/05/19

요즘 SSD(솔리드 스테이트 디스크) 라 해서 이슈가 많은 것 같아서 이와 관계된 이모저모를 소개해본다.

따로 조사한 바는 없고 그냥 일하다가 체득한 짬빱의 나열이므로.
틀린 부분이 있으면 댓글 바랍니다.

기획 블로깅이나 정성 블로깅 같은 거는 하지 않는 성격이라 친절한 사진이나 도해, 근사한 짤방 따위는 기대하지 마셔요.

강의용 및 기고용으로 불펌을 금합니다. 틀린 내용이 있을 수 있습니다. 지식 자체야 뻔히 알려져 있는 것들이니 누가 뭐라 하겠어요.
신고하고 퍼가십시오~
사실 별 것도 없는데 저작권 운운 하겠어요? ㅎㅎㅎ

1. NOR / NAND ?

사용된 주요 게이트 때문에 특성지어진 이름.

2. NOR / NAND 차이점?

NOR는 프로그램이 실행될 수 있는 어드레스를 가지지만, NAND는 단순 스토리지로서의 어드레스만 가진다.
따라서 NOR로는 임베디드 시스템에서 바로 부팅도 할 수 있고 프로그램이 적재될 수도 있지만,
NAND는 단순 스토리지 역할만 하게 된다. 플로피 디스크나 USB메모리를 생각하면 된다.
플로피 디스크나 USB 메모리도 부팅하고 프로그램 실행되지 않는가?
그렇다. 허나 얘네들은 램으로 이동 적재된 후 프로그램이 실행된다는 점에서 다르다.

NOR는 비싸다 -_-; NAND는 싸다.

NAND는 공장 생산된 신제품부터 배드블럭이 포함되어 나올 수 있다.
그러나 요즘 칩을 두루 살펴본 바 공정이 발전한 결과인지 배드블럭을 찾아보긴 힘들다.
보통 CF카드 같은 것은 죄다 NAND라고 보면 된다.

3. NAND에서 프로그램을 다이렉트로 실행하는 기술들은?

삼성의 일부 ARM들은 스테핑스톤이라는 특이한 기술을 채용하고 있다.
칩 수준에서 부팅을 위한 4KB정도를 자동으로 NAND에서 읽어서 부팅용 스테핑 스톤으로 적재해준다.
4KB의 코드는 나머지 프로그램 본체를 NAND로 부터 읽어서 프로그램을 실행하게 해준다.

또한 CE .NET 에는 BINFS 라는 특수한 파일 시스템을 이용하여, 개발자가 일일이 NAND -> RAM 으로 퍼올리는 일을 할 필요없이 프로그램을 실행 가능하게 해준다.

일반 PC의 경우야 MSC(매스 스토리지 클래스) 라는 기술이 채용되어 있기도 하고,
이미 아키텍쳐 수준에서 다 지원하는 부분이라서 사용자들은 고민없이 NAND로 부터 프로그램을 실행할 수 있다.

+) 추가된 내용
삼성칩의 경우 NAND 전용 H/W 기능을 제공하여 대단히 편한 장점이 있다.
이제 그 기능 없이 땅부터 파라면 한 숨부터 쉴 것 같다. 뭐 별 건 아니지만 -_-;
MSC는 우리가 USB 메모리들을 PC에 꽂을 때 "이동식 디스크"로 보이게 하는 일련의 기술로 생각하면 된다.
MSC하나 얹기 위해 개발자들은 오늘도 삽을 들어야 한다. 걍 누클리어스꺼 모듈로 사주세요; 하고 싶은 그들의 속마음.

4. NAND는 Spare (스페어) 영역이 있다는데?

그렇다. 스페어 영역은 데이터를 저장하는 영역 외에 일부의 작은 영역을 두어 다른 용도로 사용한다.

예를 들면 트랜잭션, FTL 등으로 사용한다.
프로그래머의 상상력에 따라 다른 용도로도 얼마든지 사용가능하다.
1page 가 512Byte 인 NAND의 경우 16Byte 의 스페어 영역이 존재한다.

5. 미공개 삭제

이 부분은 특허 조사 후 공개하도록 하겠다. 당연히 특허가 있는 줄 알고 써재낄라고 했더니 없는 것 같아요.
이러니까 더 있어뵈는데 사실 별건 아니에요. 특허 검색 해보고 없으면 특허나 써야겠슴다.

6. 트랜잭션이 뭐니?

고급 파일 시스템의 저널링 기능까지는 아니지만,
낸드나 노어에 파일을 저장 중에 전원 불량이나 예기치 않은 일로 인하여,
데이터 기록작업이 뻗어버렸을 때를 대비한 장치이다.
가장 흔한 스킬로는 갱신될 블럭을 새로 쓰지 않고 복사본을 쓰면서 모두 써지면 다 써졌다고 최종적으로 기록하는 방식이다.
"다 써졌다 플래그" 가 ON 되지 않은 데이터는 기록중에 무언가 불량이 났다고 보고 되돌릴 수 있는 기능을 제공한다.
CE .NET 4.2 에서는 TFAT이라는 트랜잭션 기능이 추가된 FAT를 지원했었다.
(T 가 tiny 인걸로 알았다가 알고보니 transaction 이라고.. 기억하고 있는데 틀리다면 지적바랍니다.)

7. 저널링이 뭐니?

자세한 건 나도 모르고 파일 시스템이 깨졌을 때, 단편화가 심해져서 아작 났을 때 스스로 복구 하는 기능정도로 이해하면 될 것 같다.
원래는 XFS 정도가 가장 유명한 모양이다. 잘은 모른다.
여튼 돌아와서 이쪽 NOR, NAND를 위한 저널링 파일 시스템으로는 JFFS, JFFS2등이 가장 유명하고 이미 많이 구현되어 있다.

저널링을 떠나서 NOR나 NAND를 위한 초 심플 FS로서 YAFFS등도 있다.
파일시스템이라는 거창한 이름까지 붙이지 않는다면야 개발자들이 얼렁뚱땅 만든 구조도 많이 돌아다닌다.
리눅스의 경우 MTD 라는 레이어가 아주아주 잘 되어 있다.
일전에 일했던 회사에서는 따로 캐릭터 디바이스를 만들어서 cp /dev/flchar > /dev/myapp 식으로 왕창 복사하는 초저수준의 작업을 한 적도 있긴 하다. -_-;

파일시스템 여담을 하나 더 하자면 돈 주고 OS/2 WARP를 사서 썼던 경험을 들 수 있다.
이 녀석 파일 시스템은 HPFS 라고 꽤 진보된 FS라고 기억한다.
바이너리 트리로 구성된 파일 기술 정보를 가지고, 그 테이블을 플래터의 중앙에 위치시킨다고 한 것 같다.
가장 기억 나는 것은 하드 디스크 소리였다. 하드 디스크 소리가 달라졌던 것이다.
티티..티티티.. 하는 것이 보통의 FAT 쪽 소리라면, HPFS는 찌이잉~ 한 소리로 기억을 한다. (아님 말구 --)
아마도 OS 주요 파일 배치가 플래터의 중앙에서 가장 가까운 곳에 적절하게 위치한 것은 아닐까?
하드의 팅팅 소음은 헤드 이송시에 발생하므로 헤드 이송 구간이 최적화 되었다면 소음이 달라질만도 한다.
여튼 넘어가자 -
-;

8. IDE나 SATA스펙 때문에 NAND등을 이용한 SSD의 속도는 발전해봐야 HDD와 비슷할 것이다?

아니다. HDD의 RPM이 올라가고 기술적으로 발전한다 하여도 NAND등을 결코 넘어설 수 있는 벽이 있는데.
그것은 바로 seek time이다.
HDD는 구조상 헤드가 데이터 위치를 찾아다니며 기계적으로 움직여야 한다.
요즘 하드야 대부분 조용하지만 동동동동~ 틱틱틱틱하는 소음은 대부분 하드의 헤드가 돌아다니는 소리라고 보면 된다.
이 일련의 작업은 대단히 기계적인 작업이어서 전기적인 신호로서 모든 것을 처리하는 NAND등의 스피드를 넘어설 수는 없다.
NAND의 읽기, 쓰기 속도는 아직도 느린편이긴 하지만 seek time만은 하드에게 추월당하는 일은 없을 것으로 예상된다.

9. 내구한도 ?

노어 낸드 둘다 일정 영역에 대하여 쓰기/지우기를 반복하면 피로파괴가 일어난다.
따라서 이에 대한 신뢰성 걱정이 많다.
초기 노어는 한 셀에 대하여 10만회의 개런티를 했다.
요즘 노어는 한 셀에 대하여 1만회밖에 안 하기는 녀석도 있다. 그렇다면 문제가 크짆아?
허나 FTL 기술의 발전과 함께 최근 IT 제품의 싸이클이 매우 짧은 관계로 무리없이 용인되는 수준이라고도 여겨진다.
실제로도 데이터 쉬트에서 밝히는 일부 노어의 데이터 보존 개런티는 10년정도이다.
이 10년은 아무짓도 안 해도 10년만 간다는 뜻이다.
하지만 이 역시 정말정말정말 최악의 경우를 뜻한다고 보면 될 것 같다.

그냥 추정인데, 삼성전자에서 최근 발표하기를 부도체에 전하를 저장하는 방식을 통하여 집적도를 끌어올린 중대 사건이 있었는데,
이 기술을 통하면 전하들이 인접셀로 이동하면서 데이터가 붕괴되는 일이 더 적을 것 같은 생각이 들기도 한다.
이런 기술로 인하여 데이터 보존 기간이 비약적으로 늘 수 있지 않을까? (이건 정말 그냥 추정이다)

10. 내구한도 회피 방법론.

이와 관련한 대부분의 특허는 이스라엘의 M-System 사에서 많이 가지고 있으며.
삼성전자에서도 많이 가지고 있다.
주로 통칭 FTL(Flash Translation Layer)이라고 불리며 이러한 내구한도를 극복하는 기술을 담고 있다.
리눅스 소스에는 FTL, NFTL 이라 하여 이미 소스가 공개되어 있다.
비지니스 모델이 특이한데 M-System 의 경우 소스는 공개, 이용도 자유, 만들어진 물리적인 제품은 로얄티로 알고 있다. (확인 사항 아님)
삼성전자의 경우 포켓스토어 시리즈로 불리다가 최근에 II 버전이 XSR 이라는 이름으로 발표되었다.
구조와 어댑테이션 레이어를 조금 살펴본 결과에 따르면 매우 우수하다.
잘 만들어져있다. 설계이념도 훌륭하다. 여러 OS의 여러 디바이스에서 여러 상황에서 유연하게 사용가능하도록 되어있다.

11. FTL은 도대체 무슨 일을 하는가?

대부분 비슷하다. NAND의 어드레스를 뜻하는 블럭 넘버를 0-1023이 있다고 치자. FTL이 적용되면 이 블럭들을 모두 돌려서 쓴다.
섞어 쓰기도 하고 순차적으로 돌려쓰기도 한다.
예를 들어 FAT 시스템이라면 파일 정보를 기록되는 FAT가 0번 블럭쯤에 기록될 것이다.
이러한 시스템에서 특정 파일 1바이트만 바뀌어도 0번 블럭의 FAT는 수정되어야 하며 0번 블럭은 짧은 시간내에 파괴 될 것이다.
FTL이 적용되면 이러한 블럭을 마구 돌려쓴다.
가장 쉬운 알고리즘이라면 0번 블럭의 FAT는 다음 파일 수정시 1번 블럭으로 이동되는 메커니즘을 가질 것이다.
내부는 이보다는 복잡해지겠지만 기본 이념은 같다.
여기서 FTL은 한 발짝 나아가서 특정 블럭이 파괴되었을 경우 해당 블럭을 대체해주는 기술까지 가지고 있다.
전체 영역의 일부분을 보조 영역으로 잡아놓고 배드 블럭이 발생한 경우 보조 영역에서 대체하여 사용하게 해준다.
이런 일련의 기법들을 wear leveling 이라고 하는 모양이다. 난 별로 안 쓰는 단어.

참고로 ECC도 안 좋아함.

12. 노어, 낸드, EEPROM에서 지우는 것은 무엇을 의미하는가?

상식적이라면 보통 0x00 으로 바뀌는 것을 지운다고 생각할 터이지만 이쪽 계통은 반대이다.
특별한 스펙의 경우도 있을지 모르겠지만 보통은 삭제 작업을 하고 나면 0xFF가 된다.

13. 노어, 낸드는 특정 사이즈만큼 지우고 써야 한다는데?

그렇다.

노어와 낸드는 기본적으로 지우고 써야 한다. 0x01 이 써있던 셀에 0xf0을 바로 쓰면 어떻게 될까?
아마도 에러를 내거나 0x00 이 될 것이다.
이는 노어와 낸드의 기본적인 속성이 1->0 으로는 가능하나 0->1로는 불가능하기 때문이다.
여튼 노어와 낸드는 삭제 단위를 가지고 있다.
인텔의 노어들은 주로 128KB, 256KB단위로 지우고 쓸 수 있다.
낸드들은 블럭단위가 지우는 사이즈이다. 뭐 사실 페이지 단위로 지워지기도 하고 데이터쉬트에 따라 여러가지 방법이 있다.
부트블럭 플래시라고 그 단위를 더 세분화하여 지울 수도 있다.
이런 쪽은 개발자들이 닥쳤을 때 참고하면 된다.
여튼 지우는 단위가 저러하니 1바이트만 고쳐도 128KB바이트를 통째로 지우고 다시 써야 하는 일이 생기는 데,
상당한 비효율이 아닐 수 없다. 허나 이런 비효율을 회피하는 스킬은 다 있다.

14. 0XFF -> 0XFE -> 0X0E 가 가능한가연?

가능하다. 위에서 항상 지우고 써야 한다고 했으나 비트를 이렇게 까나가는 경우에 한하여
많은 플래시들이 위의 작업이 가능하다. 기본적으로 플래시가 1->0 이 가능하기 때문에 그러하다.
하지만 어떤 데이터 쉬트를 보자면 이런 행위는 내구한도를 대단히 저해하므로 절대 사용하지 말라고 써있기도 하고.
왠지 꽁수 같으니 무슨 일이 일어날지 모르는 양산형 제품에서는 사용하지 말도록 하자 -_-;

15. 기타 롬의 종류는?

참고로 EEPROM은 100만회 정도까지도 쓰고 지우기를 보장한다고 한다.
자외선을 쏘여서 지우는 과거의 EPROM도 있었으나 최근에는 잘 사용하지 않는 듯 하다.

이더넷 카드에 맥어드레스등 소용량의 데이터를 저장하는데에는 시리얼 EEPROM을 사용한다.
주로 인터페이스는 I2C를 사용하고 정말 작은 사이즈를 가진다.

PC의 롬바이오스등에 사용하는 EEPROM은 일반적인 어드레스 핀을 가지는 EEPROM이다.
개인적인 경험에 따르면 EEPROM은 ESD, 그러니까 정전기나 전기적 쇼크에 특히 더 취약한 느낌이다.

마이크로마우스 대회등에서 대회만 나가면 프로그램이 죽어요 하는 징크스들은 특히 그런 경우가 많았다.
쇠로 된 핀셋을 사용하다 사소한 전기적 쇼크들로 인하여 지워진 경우들을 목격한 적이 있다.

공장에서 찍어나오는 롬은 마스크 롬이라고 한다. 공장에서 모든 내용이 기록되어 나온채 끝이다.
OTP라고 하여 (원타임프로그래밍? 정도의 약자) 한번만 쓸 수 있는 롬도 있다.
보통 저가형 마이컴 내부에 삽입되어 단 한 번만 프로그램을 기록할 수 있다.
제품을 위한 펌웨어가 완성되면 OTP에 기록하여 출하하는 방식이다.
(참고 : 보안업계에서 OTP는 원타임패스워드를 뜻한다. 가장 흔한 OTP는 은행용 보안카드이다. 비밀번호가 한 번 쓰면 변경되는 방식이다)

사소한 경험 하나를 추가하면 EEPROM을 읽는 방법은 짬밥이 된 양반들은 이투피롬이라고 읽는 것 같다.
경험 없는 개발자들이 이이피롬이라고 읽는 느낌이다.
I2C는 짬밥과 관계없이 아이투씨, 아이스퀘어씨, 하여 읽는 방법이 혼재된 느낌이지만. -_-;

16. DOM은 뭐니?

예전에 M-System, 국내 업체 한빛, 맥산등에서 찍어내던 IDE슬롯등에 바로 삽입가능한 NOR메모리였다.
실제로도 하드로 잡히고 하드로서 동작하는 수메가 바이트 짜리의 초소형 유사 하드라고 보면 된다.

요즘의 SSD는 버퍼 및 자체적인 알로리즘과 칩을 탑재하여 고속, 고신뢰성을 구현하는 것 같다. (최신 뉴스는 잘 모르겠다)
예전의 제품들은 NOR를 사용하여 용량도 작았고, SSD수준의 버퍼나 처리 ASIC이 없었으므로 쓰기 작업이 상당히 느렸던 것 같다.
어플라이언스 장비나 키오스크용으로 타게팅 되어,
지오드, 트랜스메타등의 산업용 펜티엄3급의 일체형 보드와 함께 사용되었 던 것 같은데 그 이후 어떻게 되었는지는 모르겠다.

아. 그리고 그 당시 배터리 + SDRAM 조합의 하드디스크 대체용 장치들도 국내에 출시 기사가 있었는데.
제품 실물 구경은 못해봤다 -_-;

17. NAND 메모리를 양산으로 돌리는 기법은?

낸드는 칩마다 지문인양 배드블럭을 서로 다르게 가지고 있으므로 양산시에 1:1 덤프 뜨는 방식으로는 대량 복제가 불가능하다.
따라서 전용의 알고리즘과 장비가 필요하게 된다.
요즘 낸드들은 대부분 배드블럭이 0에 가깝지만, 아직 완전히 개런티 하지는 않으므로,
양산 대응의 뭔가가 있어야 한다. (배드블럭 0를 개런티 하는 칩도 있다고 하며 모델넘버 자체가 다르다고 하는데 잘 모르겠다)
이와 대응해서는 eetools 라는 회사와 DATA IO라는 회사가 유명하다.
eetools 는 국내에서 컴패스21 이라는 곳에서 서비스. DATA IO는 까먹었다.
삼성전자의 XSR 알고리즘을 서비스 해주기도 한다.
전자전에서 일제 장비도 좀 봤는데 위 두 회사에 비해서 좋은 점은 모르겠고 설명도 못 받았다 -_-; 위 두 회사는 둘 다 서비스 잘 해주는 것 같고, 장비를 구입해본 회사와 더 좋다고 여겨지는 회사가 있으나 여기서 소개는 생략한다.

18. SSD의 미래는?

요즘 SSD기술의 안쪽을 잘 모르니 단언하여 말하기는 어려우나.
이미 알려져 있는 기술의 조합만으로도 그 미래는 대충 예상해 볼만 하다.

첫번재는 전용 컨트롤러 ASIC이 이미 많이 등장했으리라고 여겨진다.
FTL이나 등등 일련의 알고리즘은 ASIC에서 H/W 수준에서 초고속으로 해결해줄 것이다.
느린 속도 문제는 대용량 버퍼를 두어 해결 할 것이다.
여전히 지우기/쓰기 속도는 HDD보다 현저히 느리므로 버퍼단에서 처리를 할 예정인데 여기에도 문제는 있다.
버퍼가 128MB라고 할때 129MB짜리 파일을 쓰고 지우면 느려질까?
아니다 실제로는 버퍼가 차는 동안에도 작업은 수행되므로 그 보다는 더 여유가 있긴 하다.
허나 버퍼로만 때우려는 노력은 좀 무모하고 다른 스킬들이 있다.
NAND를 병렬로 달아서 순차적으로 처리하고, 버스트 모드에 시퀀설 기록 모드에 엎어치고 메치고 하는 등,
대용량 SSD에 있어서 속도와 신뢰성 문제를 극복하는 아이디어는 이미 많이 나와 있다.
(제품 레벨에서 구현되었는지는 안 써보고 이쪽 자료를 찾아본 적이 없어서 모르겠다.)

그러고 보니 예전에는 인텔 NOR 16비트 두 개 묶어서 32비트로 사용하던 것이 관행인 시절도 있었다.
NOR 하니까 생각나는데 이쪽 계통은 상태읽기 작업동안 메모리 전체가 레지스터화 되는 불편함이 있었다.
보통 S/W 리셋시에 먹통이 되는 고약한 버그를 양산..

. . . 대충 쓸 건 많이 쓴 것 같은데.
정리해서 더 잘쓰기는 귀찮고. 오늘은 여기까지만.

이하 댓글 복원

결례일지는 모르겠지만 2번 항목이 제가 아는 부분과 달라서 덧글을 남깁니다. NAND Flash는 블락단위로 읽고 쓰는게 가능한 건 맞지만 NOR Flash는 1바이트로 읽고 쓰기가 가능합니다. 따라서 프로그램이 실행될 수 있는 것이구요. 프로그램용 어드레스를 따로 가진다는 얘기는 첨 듣습니다.. ㅡㅡ;; Erase는 말씀하신 대로 블락으로 처리하는 것으로 알고 있습니다. 이 부분을 헷갈리신게 아닌지 싶습니다. 결례가 되었다면 죄송합니다. posted by 윤기철 on 2007.08.02-04:34

윤기철님 / 에.. 결례 아닙니다^^;; 제가 글을 좀 대충 써놔서 ;;;

정확히 말씀드리자면...;; 13, 14 항목을 참고하시고요..

지우기는 항상 블럭(섹터)단위로 해야 되지요. NOR든 NAND든 그렇습니다.

그리고 쓰기는 NOR, NAND 둘다 1byte 씩 쓸 수 있습니다.
허나 기존에 값이 있던 곳에 다시 쓰려면 일단 지우고 써야 합니다.
사실 구조적으로 따지자면 0XFF 가 있던 자리에는 지우기 없이 바로 써도 됩니다.

읽기도 마찬가지로 1byte씩 읽을 수 있습니다.

그러나 또 살펴보자면 1byte 씩 쓰기/읽기는 불가능하기도 합니다.
이는 두 칩 다 버스폭에 달려 있습니다.
사실 읽기는 1byte씩 읽는 것이 아니라 NOR, NAND칩의 해당 데이터 버스폭 만큼 읽을 수 있습니다.

예를들어 16비트 NAND의 경우 한 번의 명령어에 16비트씩 읽어오지요.

또한, 32비트 버스폭의 NOR에서 0번지에 0x1 을 쓰고 1번지에 0x2를 순차적으로 쓰면 반칙이 됩니다. 14번 항목때문에 그렇죠.
첫번째 쓰기에서 0x00000001 이 써지면서 앞 셀이 전부 까져나갔기 때문입니다.
따라서 NOR를 다루는 포인터는 항상 버스 폭과 같아야 편하지요. 안 그러면 버그의 우려가 많이 생갑니다.

에 또.. 예를 들어 스트라타 16비트 2개를 병렬로 붙이면 32비트가 되므로 우리가 보통 쓰는 ARM 아키텍쳐랑 궁합이 잘 맞죠. 1워드가 4바이트니까요.
8비트 버스의 NAND같은 경우는 1바이트씩 순차적으로 읽죠.

NOR가 프로그램용 어드레스를 따로 가진다고 쓴 것은 아니고 프로그램이 실행될 수 있는 어드레스를 가진다는 뜻이지요.
즉, PC (프로그램카운터) 가 위치할 수 있는 메모리라는 뜻입니다.
예를 들어 256KB짜리 NOR의 경우에는 어드래스 맵핑을 0번지에서부터 한다고 했을때 0 ------- 0x1000:0000 까지 주소를 가질 수가 있습니다.
읽기만 한다고 했을때 램이나 마찬가지이므로 프로그램이 바로 실행되지요.
사실 이 상태에서 쓰기는 불가능 하므로 변수 선언이나 스택을 사용할 수 없으므로 NOR만으로 어떤 코드를 돌릴 수는 없습니다.

NAND의 경우에는 저런 주소가 없죠.
단지 NAND내부에 있는 블럭/페이지 + 오프셋을 지정할 수만 있어요.
NAND는 내부 주소들은 메모리맵상의 주소로서 사용되지 못합니다.
이것을 지정하는 방법은 외부에 지정된 핀과 데이터 버스를 가지고 수행하는데 삼성칩은 그걸 알아서 해주는 모듈이 붙어 있어요. 아주 편하지요.

FDD와 RAM의 차이라고 생각하면 됩니다. RAM은 프로그램이 바로 돌지만, FDD는 OS에 의해서 RAM으로 프로그램을 적재한다음 실행하죠.
RAM은 번지를 가지지만 FDD의 섹터, 트랙, 블럭은 PC가 위치할 수 있는 번지가 아니에요 (OS에서 MMU + VFS로 시늉 낼 수도 있긴 있습니다 -_-)

NOR에서 트릭을 쓴다면 사실 지우지 않고 update 방식으로 쓰는 것도 가능합니다.
예를 들어 Erase 단위가 16KB 일때 한 번 지우고 나서 앞에 8KB 쓰고 뒤에 나중에 8KB써도 동작 잘 되죠.
정말 최악의 트릭은 0XFFFFFFF 에서 부터 1씩 감소하는 카운터 변수를 둔다고 가정하면 그 셀에 대해서는 안 지우고 걍 계속 써도 되요.
문제는 데이터 쉬트에서 글케 쓰면 칩이 빨리 파괴된다고 경고를 주더군요 -_-;

에 역시.. 설명이 매끄럽지 못하군요 -_-;

도움이 되기를 바랍니다.

아참. 반갑습니다~ 굽신굽신~ posted by dawnsea on 2007.08.02-07:13

NOR는 프로그램이 실행될 수 있는 어드레스를 가지지만, NAND는 단순 스토리지로서의 어드레스만 가진다.
=> 제가 이 설명 부분에서 오해를 했던 거 같습니다.
위에서 언급하신 삼성칩은 S3C2410 이나 S3C2440 류의 CPU를 말씀하시는 건가요?
받은 S3C2410 CE4.2 BSP에서 NAND 2K block 이 지원되지 않아서 NAND 드라이버 고친다고 삽질할 때 어드레스를 계산해서 명령으로 읽을 블락하고 오프셋 줬었던 걸로 기억되는데..
삼성칩에서 해주는 거였는지.. ^^;;; 1년 전이라 자세히 기억이 나질 않네요.. 어떻게 했더라.. ㅡㅡ;(기억력이 약해서)
근데 ECC 가 정확히 무엇인가요? Error Correction 관련 맞는 것인지.. S3C2410 에서 컨트롤러가 있길래 그냥 썼거든요... (제가 좀 무식해서.. ㅠㅠ)

아 네.. 저도 반갑습니다~ 굽신굽신~ posted by 윤기철 on 2007.08.02-08:24

윤기철님 / error checking and correction 이라고 네이버 백과사전에 나오네요;; 사실 ECC급 고신뢰성 잡을 안 해봐서.. ECC는 저도 다 제거하고 사용합니다.





공유하기













[t:/] is not "technology - root". dawnsea, rss